#!/usr/bin/python
# -*- coding: utf-8 -*-

#$ -l h_rt=01:00:00
#$ -l virtual_free=500M
#$ -o $HOME/sportstats.out
#$ -e $HOME/sportstats.err
#$ -N sportstats

import sys
sys.path.append('/home/artem/pywikipedia')
#sys.path.append('/home/artem/Dropbox/wiki/bot/pywikipedia')
#sys.path.append('pywikipedia')

import wikipedia
import urllib2
import re

from BeautifulSoup import BeautifulSoup

def GetDate():
	import datetime
	
	return datetime.date.today()

def MakeData(url_append):
	url = u'http://ru.soccerway.com/national/' + url_append
	
	try:
		webpage = urllib2.urlopen(url)
	except:
		return[[], '', '']
	
	soup = BeautifulSoup(webpage)
	
	try:
		tbody = soup.find(attrs={'class': 'leaguetable sortable table detailed-table'}).find('tbody').findAll('tr')
	except AttributeError: # no table found - return nothing
		return [[], '', '']
	
	table = []
	color = '{{#switch:{{{1}}}'
	for tr in tbody:
		tds = tr.findAll('td')
		if len(tds) < 11: # main table is absent - return nothing
			return [[], '', '']
		dict={}
		dict['place'] = tds[0].contents[0]
		dict['team']  = tds[2].a['title']
		dict['won']   = tds[4].contents[0]
		dict['drawn'] = tds[5].contents[0]
		dict['lost']  = tds[6].contents[0]
		dict['gf']    = tds[7].contents[0]
		dict['ga']    = tds[8].contents[0]
		dict['pts']   = tds[10].contents[0]
		dict['href']  = tds[2].a['href']
		table.append(dict)
		
		color += '\n | ' + dict['place'] + ' = '
		if SetColor(tds[0]['class']) != '':
			color += SetColor(tds[0]['class'])
		else:
			if int(dict['place'])%2 == 0:
				color += 'even'
			else:
				color += 'odd'
	color += u'\n}}<noinclude>[[Категория:Подстраницы шаблона Спортивная таблица]]</noinclude>'
	
	legend = ''
	zone_divs = soup.findAll(attrs={'class': 'zone-legend-item-container'})
	try:
		for div in zone_divs:
			legend += u'{{Спортивная таблица/Футбол-легенда|' + div.div['class'].replace('zone-legend-item legend-' ,'') + '|'
			legend += div.div.contents[0].replace('\n' ,'').lstrip().rstrip() + '}} '
	except IndexError:
		legend = ''
	
	return [table, color, legend]

def RuWikification(append):
	site = wikipedia.getSite('ru', 'wikipedia')
	
	page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append + u'/Замена')
	if page.exists():
		if page.isRedirectPage():
			page = page.getRedirectTarget()	
	else:
		title = u'Шаблон:Спортивная таблица/Футбол/' + re.findall('[^/]+', append)[0] + u'/Замена'
		if title != page.title():
			if wikipedia.Page(site, title).exists():
				page.put(u'#REDIRECT [[' + title + ']]', u'Автоматическое создание перенаправления на страницу [[' + title + ']]')
				page = wikipedia.Page(site, title)
			else:
				wikipedia.stopme()
				return {}
		else:
			wikipedia.stopme()
			return {}
	
	text = page.get()
	
	wikipedia.stopme()
	
	dict = {}
	for line in text.splitlines():
		try:
			name = re.findall('(?<=:).*(?=[=])', line)[0]
			wikified_name = re.findall('(?<=[=]).*', line)[0]
			dict[name] = wikified_name
		except:
			continue
		
	return dict

def WikifyTeam(ru_name, href, append):
	url = u'http://ru.soccerway.com' + href
	
	try:
		print u"Retrieving " + url
		webpage = urllib2.urlopen(url)
		print u"\nDone!"
	except:
		print u"\nFail!"
		return ru_name
	
	soup = BeautifulSoup(webpage)
	
	en_name = soup.find('h1').contents[0]
	
	site = wikipedia.Site('en', 'wikipedia')
	page = wikipedia.Page(site, en_name)
	try:
		if page.exists():
			if page.isRedirectPage():
				page = page.getRedirectTarget()
			text = page.get()
			try:
				ruwp_name = wikipedia.getLanguageLinks(text, site)[wikipedia.getSite('ru', 'wikipedia')].title()
			except KeyError:
				ruwp_name = ''
			print ruwp_name.encode('cp1251')
		else:
			ruwp_name = ''
	except:
		ruwp_name = ''
	
	if ruwp_name == '':
		res = ru_name
	elif ruwp_name == ru_name:
		res = '[[' + ru_name + ']]'
	else:
		res = '[[' + ruwp_name + '|' + ru_name + ']]'
	
	site = wikipedia.Site('ru', 'wikipedia')
	page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append + u'/Замена')
	if page.exists():
		if page.isRedirectPage():
			page = page.getRedirectTarget()
		text = page.get()
		text += '\n:' + ru_name + '=' + res
	else:
		print re.findall('[^/]+', append)
		title = u'Шаблон:Спортивная таблица/Футбол/' + re.findall('[^/]+', append)[0] + u'/Замена'
		if title != page.title():
			page.put(u'#REDIRECT [[' + title + ']]', u'Автоматическое создание перенаправления на страницу [[' + title + ']]')
			page = wikipedia.Page(site, title)
		if page.exists():
			text = page.get()
		else:
			text = u'[[Категория:Подстраницы шаблона Спортивная таблица]]'
		text += '\n:' + ru_name + '=' + res
	page.put(text, comment=u'Дополнение списка замен')
	wikipedia.stopme()
	
	return res
	
def SetColor(rank):
	return rank.replace('rank ', '').replace('rank-', '')
	
def MakeContent(table, ru_wikification, append):
	content = u"{{Спортивная таблица/Футбол-шапка}}\n"
	for item in table:
		content += u"{{Спортивная таблица/Футбол-строка|" + item['place'] + "|"
		if item['team'] in ru_wikification:
			content += ru_wikification[item['team']]
		else:
			content += WikifyTeam(item['team'], item['href'], append)
		content += "|" + item['won'] + "|" + item['drawn'] + "|" + item['lost'] + "|" + item['gf'] + "|" + item['ga'] + u"|" + item['pts']
		content += u"|цвет={{Спортивная таблица/Футбол/" + append + u"/Цвета|" + item['place'] + "}}}}\n"
	content += u"{{Спортивная таблица/Футбол-подвал|"
	content += u"{{#ifexist:Шаблон:Спортивная таблица/Футбол/" + append + u"/Легенда|{{Спортивная таблица/Футбол/" + append + u"/Легенда}}}}\n"
	content += u"Источник данных: [http://ru.soccerway.com/national/" + append + u" soccerway.com]<br/>\n"
	content += u"Обновлено " + u"{{Спортивная таблица/Футбол/" + append + u"/Дата обновления}}"
	content += u"\n{{Tnavbar|Спортивная таблица/Футбол/" + append + u"|plain=1}}\n}}"
	content += u"<noinclude>\n{{Спортивная таблица/Футбол/Комментарий}}"
	content += u"\n[[Категория:Подстраницы шаблона Спортивная таблица:Футбол|" + append + u"]]</noinclude>"
	
	return content

def WriteToWP(content, color, legend, append):
	site = wikipedia.getSite('ru', 'wikipedia')
	
	page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append)
	color_page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append + u'/Цвета')
	legend_page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append + u'/Легенда')
	
	if not color_page.exists():
		color_page.put(color, comment=u'Создание подстраницы цветовой гаммы')
	if not legend_page.exists():
		if legend != '':
			legend_page.put(legend + "<br/>", comment=u'Создание подстраницы легенды')
	
	ret = page.put(content, comment=u'Обновление турнирной таблицы')
	if 'nochange' not in ret[2]:
		date = GetDate()
		wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/' + append + u'/Дата обновления').put(str(date.strftime('{{date|%d|%m|%Y|2}}')).decode('utf8')+u'<noinclude>[[Категория:Подстраницы шаблона Спортивная таблица]]</noinclude>', comment=u'Дата обновления')

	wikipedia.stopme()

site = wikipedia.Site('ru', 'wikipedia')
page = wikipedia.Page(site, u'Шаблон:Спортивная таблица/Футбол/Список')
list = re.findall(u'(?<=Строка[|]).*(?=}})', page.get())
for line in list:
	append = line.strip().strip('/')
	
	[table, color, legend] = MakeData(append)
	ru_wikification = RuWikification(append)
	
	if len(table) > 0:
		WriteToWP(MakeContent(table, ru_wikification, append), color, legend, append)
